package com.triadsystems.cashweb.controle.mbean.impl;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;

import javax.annotation.PostConstruct;
import javax.inject.Named;

import lombok.Getter;
import lombok.Setter;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;

import com.icon.infra.controle.utils.GenericoCRUDBean;
import com.icon.infra.utils.ICONUtil;
import com.triadsystems.cashweb.modelo.negocio.servicos.IUsuarioServico;
import com.triadsystems.cashweb.modelo.persistencia.entidades.Usuario;
@Named
@Scope("session")
public class UsuarioBean extends GenericoCRUDBean<Usuario, Usuario> {
	private static final long serialVersionUID = 1L;
	
	@Autowired
	private IUsuarioServico usuarioServico;

	@Getter
	@Setter
	private String avatarUsuario = "/resources/imagens/avatar_usuario.jpg";

	@Getter
	@Setter
	private String nome = "";

	@PostConstruct
	@Override
	protected void inicializarAtributosManagedBean() throws Exception {
		setPaginaLista("listaUsuario");
		setPaginaForm("listaUsuario");
		setObjetoPrincipalServico(usuarioServico);
		setListaServico(usuarioServico);

		setIsExibirAcoesPadrao(true);
		try {
			damPrepareNovoObjetoPrincipal();
		} catch (Exception e) {
			e.printStackTrace();
		}

		setLista(new ArrayList<Usuario>());

		// utilizado no dialogo de ajuda
		setPaginaAtual(getPaginaLista());

		//
	}

	@Override
	protected void damSalvarObjeto() throws Exception {

		if (getObjetoPrincipal().getImagem() == null
				|| getObjetoPrincipal().getNomeImagem() == null) {

			InputStream imgPadrao = ICONUtil
					.getArquivoInputStream("avatar_usuario.jpg");
			getObjetoPrincipal().setImagem(
					ICONUtil.ImagemToByte(imgPadrao));

			// seta nome img
			String extensao = ".jpg";
			extensao = extensao.substring(extensao.lastIndexOf('.'));
			String txt = ICONUtil.getDataTimestampParaForum(new Date());
			// nome img
			getObjetoPrincipal().setNomeImagem(
					"usuario_" + txt + extensao);
		}

			getObjetoPrincipal().setSenha(
					ICONUtil.getSenhaCriptografada(getObjetoPrincipal().getSenha()));

		usuarioServico.salvarObjeto(getObjetoPrincipal());

	}

	@Override
	protected void damAfterShowNovo() {
		setAvatarUsuario("/resources/imagens/avatar_usuario.jpg");
		getObjetoPrincipal().setImagem(null);
		getObjetoPrincipal().setNomeImagem(null);
	}

	public void doInserirImagemListener(FileUploadEvent event) {
		try {

			// evitar verbosidade
			UploadedFile file = event.getFile();

			// imagem barco
			setAvatarUsuario(ICONUtil.ImagemParaStringByte64(file));

			// setImagem
			getObjetoPrincipal().setImagem(
					ICONUtil.ImagemToByte(event.getFile()));

			// seta nome img
			String extensao = file.getFileName();
			extensao = extensao.substring(extensao.lastIndexOf('.'));

			String txt = ICONUtil.getDataTimestampParaForum(new Date());

			// nome img
			getObjetoPrincipal().setNomeImagem(
					"usuario_" + txt + extensao);

		} catch (Exception e) {
			addMessageException(e);
		}
	}

	@Override
	protected void damAfterShowEditar() throws Exception {
		String r = "data:image/"
				+ ICONUtil.getExtension(getObjetoPrincipal()
						.getNomeImagem()) + ";base64,";
		r = r
				+ org.postgresql.util.Base64.encodeBytes(getObjetoPrincipal()
						.getImagem());
		setAvatarUsuario(r);
	}

	@Override
	protected void damAfterShowDetalhar() throws Exception {
		String r = "data:image/"
				+ ICONUtil.getExtension(getObjetoPrincipal()
						.getNomeImagem()) + ";base64,";
		r = r
				+ org.postgresql.util.Base64.encodeBytes(getObjetoPrincipal().getImagem());
		setAvatarUsuario(r);
		usuarioServico.salvarObjeto(getObjetoPrincipal());
	}

	@Override
	protected void damExcluirObjeto(Usuario vo) throws Exception {
		usuarioServico.removerObjeto(getObjetoPrincipal());
	}
}
